# 2025.03.01力扣网刷题
# 检查两个字符串是否几乎相等——哈希表、字符串、计数——简单
# 如果两个字符串 word1 和 word2 中从 'a' 到 'z' 每一个字母出现频率之差都 不超过 3 ，那么我们称这两个字符串 word1 和 word2 几乎相等 。
# 给你两个长度都为 n 的字符串 word1 和 word2 ，如果 word1 和 word2 几乎相等 ，请你返回 true ，否则返回 false 。
# 一个字母 x 的出现 频率 指的是它在字符串中出现的次数。
# 示例 1：
# 输入：word1 = "aaaa", word2 = "bccb"
# 输出：false
# 解释：字符串 "aaaa" 中有 4 个 'a' ，但是 "bccb" 中有 0 个 'a' 。
# 两者之差为 4 ，大于上限 3 。
# 示例 2：
# 输入：word1 = "abcdeef", word2 = "abaaacc"
# 输出：true
# 解释：word1 和 word2 中每个字母出现频率之差至多为 3 ：
# - 'a' 在 word1 中出现了 1 次，在 word2 中出现了 4 次，差为 3 。
# - 'b' 在 word1 中出现了 1 次，在 word2 中出现了 1 次，差为 0 。
# - 'c' 在 word1 中出现了 1 次，在 word2 中出现了 2 次，差为 1 。
# - 'd' 在 word1 中出现了 1 次，在 word2 中出现了 0 次，差为 1 。
# - 'e' 在 word1 中出现了 2 次，在 word2 中出现了 0 次，差为 2 。
# - 'f' 在 word1 中出现了 1 次，在 word2 中出现了 0 次，差为 1 。
# 示例 3：
# 输入：word1 = "cccddabba", word2 = "babababab"
# 输出：true
# 解释：word1 和 word2 中每个字母出现频率之差至多为 3 ：
# - 'a' 在 word1 中出现了 2 次，在 word2 中出现了 4 次，差为 2 。
# - 'b' 在 word1 中出现了 2 次，在 word2 中出现了 5 次，差为 3 。
# - 'c' 在 word1 中出现了 3 次，在 word2 中出现了 0 次，差为 3 。
# - 'd' 在 word1 中出现了 2 次，在 word2 中出现了 0 次，差为 2 。
# 提示：
# n == word1.length == word2.length
# 1 <= n <= 100
# word1 和 word2 都只包含小写英文字母。

class Solution(object):
    def checkAlmostEquivalent(self, word1, word2):
        """
        :type word1: str
        :type word2: str
        :rtype: bool
        """
        len1 = len(word1)
        hash1, hash2 = [0] * 26, [0] * 26
        for i in range(len1):
            key1, key2 = ord(word1[i]) - ord('a'), ord(word2[i]) - ord('a')
            hash1[key1] += 1
            hash2[key2] += 1
        for i in range(26):
            if abs(hash1[i] - hash2[i]) > 3:
                return False
        return True